package simulation.initiatives;

public interface IEngine {
  /**
   * Does one iteration of calculations on the grid
   */
  public void step();
  
  /**
   * Begins a loop that steps through each iteration
   */
  public void start();
  
  /**
   * Pauses the engine
   */
  public void pause();
  
  /**
   * Resets the engine timer to the beginning
   */
  public void reset();
  
  /**
   * Adjusts the display rate of the engine.
   * This controls different things depending on the initiative type:
   *    pulling: this controls how often the presentation asks the engine for data
   *    pushing: this controls how often the engine pushes data to the presentation
   *    buffers: this controls how often the presentation checks the buffer for the 
   *             latest iteration calculations
   *             
   * @param newRate
   */
  public void adjustDisplayRate(int newRate);
}
